using System;
using System.Collections.Generic;
using System.Text;
using DataClient;
using Common;

namespace BusinessClient
{
    /// <summary>
    /// Capa de Business. Segunda capa. Se encarga de realizar los procesos con la data 
    /// que el negocio requiera. Ademas actua como capa intermedia entre los metodos utiles 
    /// pero que no son al negocio, o que son comunes a todos los negocios (a traves de Utilidades).
    /// </summary>
    public class BizClient
    {
        #region Private Properties
        private DatClient data;
        private Util util;
        #endregion
        
        #region Public Properties
        /// <summary>
        /// Instancia unica de Utilidades. Es la misma instancia que la de las demas capas.
        /// No se puede sobreescribir la instancia, ya que de todas maneras no es necesario.
        /// </summary>
        public Util Utilidades
        {
            get { return util; }
        }
        #endregion

        #region Constructor / Destructor
        /// <summary>
        /// Constructor. Se bindea la clase con su capa inferior inmediatamente en la creacion.
        /// Adicionalmente se bindea la instancia de Util de a la capa de datos, por si se necesita para
        /// trabajos posteriores.
        /// </summary>
        /// <param name="ConnQueryString">Se recibe la cadena de conexion para la db. 
        /// Se estara pasando a la capa que realmente lo necesita.</param>
        public BizClient(string ConnQueryString)
        {
            data = new DatClient(ConnQueryString);
            util = data.ComUtil;
        }
        #endregion

        #region Public Methods
        ///Region de manejos externos de reglas de negocio y busqueda de datos de la dataLayer.
        public void InsertClient(Client dsClient)
        {
            data.Insert(dsClient);
        }
        public void UpdateClient(Client dsClient)
        {
            data.Update(dsClient);
        }

        public Client GetClients()
        {
            data.GetData();
            
            ///La instancia de Common.Client existe en data
            ///hasta que una nueva consulta se haga sobre esta capa
            ///DSClient estara guardando la ultima consulta realizada.
            ///A manera de Temp.
            return data.DSClient;
        }
        #endregion

        public Client GetClients(string filter)
        {
            data.GetData(filter);
            return data.DSClient;
        }
        #region Private Methods
        ///Region de manejos internos de reglas de negocio.
        ///Uso para prolijidad del codigo.
        #endregion
    }
}
